
        <html>
			<head>
			     <title>关于黑暗力量（BlackEnergy）的一点思考 - 腾讯电脑管家</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/12560">http://drops.wooyun.org/tips/12560</a></h1>
				
      <p>
        <h1>0x00 背景</h1>

<hr />

<p>在乌克兰电力系统被攻击之后，最近又爆出该国机场也遭受网络袭击。罪魁祸首都是黑暗力量（BlackEnergy），BlackEnergy是何方神圣？为何有如此神通？BlackEnergy是最早出现在2007年的一套恶意软件，后来出现了专门针对乌克兰政府机构打造的分支。BlackEnergy并不是最近兴起的新型恶意软件，但时至今日仍然站在潮头兴风作浪，这点值得我们关注。</p>

<h1>0x01 攻击简述</h1>

<hr />

<p>下边简要描述一下BlackEnergy的攻击过程。XLS文档通过邮件可以方便传播，文档中包含的宏代码会dropper一个vba_macro.exe，这个exe又会dropper两个东西。其一.dat结尾的文件是一个dll，而启动目录下的快捷方式是使用rundll32来运行dll中序号为1的导出函数。</p>

<p>rundll32拉起恶意dll之后，会使用进程外com的方式的去启动IE进程，然后使用IE进程去连接远程服务器，下载恶意软件组件。然后又通过安装驱动和apc注入，在系统模块中执行恶意代码，与远程服务器通信，根据远程服务器的指令以及拉取下来的恶意程序执行相应攻击。</p>

<!--more-->

<p><img src="http://static.wooyun.org//drops/20160128/2016012803545671762198.png" alt="p1" /></p>

<h1>0x02 样本危害</h1>

<hr />

<p>通过宏病毒入侵系统，留有后门，后续攻击组件清空关键系统文件，使得计算机无法正常工作，达到破坏目的。</p>

<h1>0x03 重点分析</h1>

<hr />

<h3>1. FONTCACHE.DATA文件分析</h3>

<p>FONTACACHE.DATA是由之前的<code>vba_macro.exe</code>来释放，FONTACACHE.DATA是一个dll文件，通过下面这条命令运行起来。<code>C:\WINDOWS\system32\rundll32.exe "C:\Documents and Settings\Administrator\Local Settings\Application Data\FONTCACHE.DAT",#1</code>可以看到调用dll导出的序号为1的函数。下图为导出函数表。</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803545872915258.png" alt="p2" /></p>

<p>运行后，通过virtualAlloc函数以及拷贝指令脱壳，在0x10010000地址处，写入了一个另外一个dll，暂称为primarydll。</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803545937372337.png" alt="p3" /></p>

<p>程序最终会执行到primarydll的入口处，primarydll的入口处代码，会执行<code>sub_100122B6()</code>函数，查看此函数的代码。</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803550155743436.png" alt="p4" /></p>

<p>首先会设置一系列IE注册表相关的值，然后启动一个线程。查看线程函数地址。</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803550372819529.png" alt="p5" /></p>

<p>通过三个函数注册RPC服务，开启监听。这样中毒电脑就可以接受黑客的控制。接着往下走，样本会对NTUSER.LOG文件进行操作。随后便来到一个while true中。</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803550416559625.png" alt="p6" /></p>

<p>在循环中，会调用<code>sub_10012740()</code>函数，静态分析此函数，可以看到样本在构造了http请求相关的字段后，通过CoCreateInstance来启动IE，去下载可执行文件。具体的url为：<code>http://5.149.254.114/Microsoft/Update/KC074913.php(已经失效)</code></p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803550679175724.png" alt="p7" /></p>

<h3>2. xxx.sys驱动分析</h3>

<p>恶意样本实际运行时创建的是一个随机名字的驱动文件，在此以xxx.sys代替。由于驱动加了壳所以主要通过动态调试来分析。首先进入svchost的进程的上下文，以便把分配好的内存映射到ring3的地址空间。</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803550796533822.png" alt="p8" /></p>

<p>初始化APC，从下图中可以看到 KeInitializeApc的NormalRoutine被设置为0x00c453cc</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803550987213922.png" alt="p9" /></p>

<p>插入刚才初始化的APC</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035510758821024.png" alt="p10" /></p>

<p>svchost执行到0x00c453cc的情况</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035512447401127.png" alt="p11" /></p>

<p>从该地址向回查找可以看到这是实际上是一个PE</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035513907901221.png" alt="p12" /></p>

<p>而偏移0x53cc就是这个dll的入口点</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035515934541320.png" alt="p13" /></p>

<p>至此可以看出xxx.sys先将自己的dll写入svchost的地址空间，然后通过插入apc使自己的代码执行起来。</p>

<h3>3. Killdisk样本分析</h3>

<p>将自身复制到系统盘windows目录下,重命名为svchost.exe文件，BlackEnergy的作者还真是对svchost情有独钟。</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035516866421418.png" alt="p14" /></p>

<p>病毒创建一个名为Microsoft Defender Service的服务，使用该名称用来欺骗用户，看似正常的系统安全服务程序，通过该服务，启动病毒拷贝自身到Windows目录下的svchost.exe文件,启动命令行是<code>svchost.exe -service</code>。</p>

<p>拷贝自身到windows目录下的代码:</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035518657171517.png" alt="p15" /></p>

<p>创建服务代码:</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035519847211615.png" alt="p16" /></p>

<p>创建并启动服务成功：</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035521735211712.png" alt="p17" /></p>

<p>调整进程令牌，提升进程权限，使病毒程序具有关机和修改系统目录文件的权限。</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035522316801811.png" alt="p18" /></p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803552432251199.png" alt="p19" /></p>

<p>执行病毒服务函数:</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803552580163208.png" alt="p20" /></p>

<p>打开主硬盘PhysicalDrive0，将硬盘前2560个扇区的数据全部清零，破坏硬盘MBR和文件分配表等系统启动的核心数据。</p>

<p>打开主硬盘设备:</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035527828522115.png" alt="p21" /></p>

<p>从MBR扇区开始，循环执行256次，清除256个扇区的数据:</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035528283482214.png" alt="p22" /></p>

<p>以上操作一共执行了10次，<code>10*256</code>共计2560个扇区的数据</p>

<p>从根目录开始遍历磁盘目录下的指定类型的文件,创建多个线程,将遍历到的指定类型的文件内容全部清0。</p>

<p>病毒主要清除的文件类型列表:</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035530904802312.png" alt="p23" /></p>

<p>创建新线程,开始遍历文件:</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035532974662411.png" alt="p24" /></p>

<p>扫描所有指定类型的文件:</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803553325225259.png" alt="p25" /></p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803553553739266.png" alt="p26" /></p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803553714288275.png" alt="p27" /></p>

<p>打开文件，将文件内容全部填充为0:</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803553886311284.png" alt="p28" /></p>

<p>WriteFileZeroByte函数内容:</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803554083761294.png" alt="p29" /></p>

<p>终止系统进程lsass.exe和wininit.exe,并且记录日志，通过执行shutdown命令，重启电脑，由于系统MBR、文件分配表等信息都被破坏，系统重启后奔溃，无法修复</p>

<p>终止lsass.exe进程:</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803554124329304.png" alt="p30" /></p>

<p>终止wininit.exe进程:</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035542269993113.png" alt="p31" /></p>

<p>执行shutdown命令，重启系统</p>

<p><img src="http://static.wooyun.org//drops/20160128/20160128035546131993211.png" alt="p32" /></p>

<p>由于系统关键文件被清空，导致重启后无法正常工作，整个攻击流程攻击完成。</p>

<h1>0x04 防御思考</h1>

<hr />

<p>云端拉黑md5，杀毒引擎增加静态特征，IDS、IPS等系统上封住已知的远程服务器ip或者url，如果这些就是我们全部防御策略的话，那么下一次当我们的安全产品面临类似于BlackEnergy这样的攻击的时候，注定是脆弱的。</p>

<p>以攻击的第一步XLS为例，即使不使用office 0day，简简单单的宏病毒就可以达成目的。在这个入口点的防御上，使用动态分析要比静态扫描合适一些的。对于宏脚本加密的样本来说，不停地变换加密算法对静态扫描造成了太大的干扰，而动态分析技术则无惧加密变形等对抗手段。</p>

<p>这是哈勃文件分析系统（<a href="http://habo.qq.com/">http://habo.qq.com/</a>）对攻击源头的xls文件的分析结果。</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803554815276338.png" alt="p33" /></p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803554936377345.png" alt="p34" /></p>

<p>这是哈勃对第一个dropper文件<code>vba_macro.exe</code>的分析结果。</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803555220790355.png" alt="p35" /></p>

<p>这是哈勃对伪装wordpad释放并加载驱动样本的分析结果。</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803555396567365.png" alt="p36" /></p>

<p>这是哈勃对killdisk恶意样本的分析报告</p>

<p><img src="http://static.wooyun.org//drops/20160128/2016012803555568281374.png" alt="p37" /></p>

<p>样本加壳，数据加密已经成为黑客和木马作者的必修功课，在这种情况下传统的静态扫描越来越难以独自扛起系统防护的大旗。动态行为分析很可能成为一个备选的解决方案，即使是因为用户体验的因素而采取异步分析，也能为威胁感知和威胁情报提取提供重要帮助。</p>

<p>哈勃动态分析系统还在摸索中前进，但在不久的将来，类似的动态分析系统很有可能成为企业安全防护系统中一个重要的环节。</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          